001 /* 002 * Created by IntelliJ IDEA. 003 * User: Wei Wang 004 * Date: 2002-10-22 005 * Time: 20:12:14 006 * To change this template use Options | File Templates. 007 */ 008 009 package EVolve.util; 010 011 import java.awt.*; 012 import java.util.*; 013 014 public class ColorCache implements Cloneable{ 015 private HashMap colorMap; 016 private Random random; 017 private final long seed = 2003213813; 018 private Color[] defaultColors = { 019 new Color(51,153,204), new Color(51,204,153), new Color(153,204,51),new Color(153,51,204), 020 new Color(204,51,153), new Color(204,153,51), new Color(51,204,0),new Color(51,0,204), 021 new Color(204,0,51), new Color(204,51,0), new Color(0,51,204),new Color(0,204,51), 022 new Color(204,0,204), new Color(204,204,0), new Color(0,204,204),new Color(51,153,0), 023 new Color(51,0,153), new Color(153,0,51), new Color(153,51,0),new Color(0,51,153), 024 new Color(0,153,51), new Color(153,204,0), new Color(153,0,204),new Color(0,204,153), 025 new Color(0,153,204), new Color(204,0,153), new Color(204,153,0),new Color(151,255,151), 026 new Color(255,151,151), new Color(151,151,255), new Color(204,204,255),new Color(255,204,204), 027 new Color(204,255,204), new Color(251,151,180), new Color(251,180,151),new Color(151,180,251), 028 new Color(151,251,180), new Color(180,251,151), new Color(180,151,251),new Color(145,244,45), 029 new Color(145,45,244), new Color(45,244,145), new Color(45,145,244),new Color(244,145,45), 030 new Color(244,45,145), new Color(244,145,45), new Color(0,0,255),new Color(255,0,0), 031 new Color(0,255,0), new Color(130,28,247), new Color(130,247,28),new Color(247,28,130), 032 new Color(247,130,28), new Color(28,247,130), new Color(198,130,247),new Color(0,128,255), 033 new Color(0,255,128), new Color(255,128,0), new Color(255,0,128),new Color(128,0,255), 034 new Color(255,128,0), new Color(128,255,0), new Color(187,156,26),new Color(25,250,104) 035 }; 036 private int leftColor; 037 038 public ColorCache() { 039 colorMap = new HashMap(); 040 leftColor = defaultColors.length -1; 041 random = new Random(); 042 random.setSeed(seed); 043 } 044 045 private Color getRandomColor() { 046 int sum = 0; 047 int rand[] = new int[3]; 048 049 if (leftColor>=0) { 050 return defaultColors[leftColor--]; 051 } 052 053 do { 054 while (sum<70) { 055 for (int i=0; i<rand.length;i++) { 056 rand[i] = 500; 057 while (rand[i]>255) { 058 rand[i] = (int)(random.nextDouble()*10000); 059 } 060 } 061 sum = rand[0] + rand[1] + rand[2]; 062 } 063 sum = 0; 064 } while (colorMap.containsValue(new Color(rand[0],rand[1],rand[2]))); 065 066 return new Color(rand[0],rand[1],rand[2]); 067 } 068 069 public Color getNextColor(long methodId) { 070 Color color; 071 if (!colorMap.containsKey(new Long(methodId))) { 072 color = getRandomColor(); 073 colorMap.put(new Long(methodId),color); 074 return color; 075 } 076 return (Color)colorMap.get(new Long(methodId)); 077 } 078 079 public int getKeyFromColor(Color color) { 080 Iterator it = colorMap.keySet().iterator(); 081 int methodId = -1; 082 083 while (it.hasNext()) { 084 Long key = (Long)it.next(); 085 if (color != ((Color)colorMap.get(key))) continue; 086 087 methodId = key.intValue(); 088 return methodId; 089 } 090 return methodId; 091 } 092 093 public Object clone() { 094 ColorCache o = null; 095 try { 096 o = (ColorCache)super.clone(); 097 } catch (CloneNotSupportedException e) { 098 e.printStackTrace(); 099 return null; 100 } 101 o.colorMap = (HashMap)colorMap.clone(); 102 o.defaultColors = new Color[defaultColors.length]; 103 for (int i=0; i<defaultColors.length; i++) 104 o.defaultColors[i] = defaultColors[i]; 105 return o; 106 } 107 }